/*!
 * \file GapStateMap.h
 * \brief State map GAP protocol in Serving Gateway
 */

#ifndef MGW_GAP_STATE_MAP_H
#define MGW_GAP_STATE_MAP_H

#include "GapStateUnregistered.h"
#include "GapStateRegistered.h"
#include "GapStateRegisterPend.h"


namespace tsc
{
namespace mgw
{

/**
 * State map for GAP protocol in Media Gateway
 */
class GapStateMap
{
public:

	/**
	 * Returns singleton instance of the map
	 * \return an instance of the state map
	 */
	static GapStateMap& instance();

	common::StateBase* initialState() const;

	static GapStateUnregistered* mpStateUnregistered;
	static GapStateRegistered*   mpStateRegistered;
	static GapStateRegisterPend* mpStateRegisterPend;

private:

	GapStateMap();

	virtual ~GapStateMap();

};

} // namespace mgw
} // namespace tsc

#endif // MGW_GAP_STATE_MAP_H
